package com.chenjt.netty.six_gPRC.streamReqAndResp;

import com.chenjt.netty.six_gPRC.generateCode.*;
import io.grpc.stub.StreamObserver;

import java.util.UUID;

/**
 * 注释：
 *
 * @author chenjt
 * @date 2024/8/16 10:23
 */
public class StudentServiceImpl extends StudentServiceGrpc.StudentServiceImplBase {


    @Override
    public StreamObserver<StreamRequest> biTalk(StreamObserver<StreamResponse> responseObserver) {

        return new StreamObserver<StreamRequest>(){

            @Override
            public void onNext(StreamRequest streamRequest) {
                System.out.println(streamRequest.getRequestInfo());

                responseObserver.onNext(StreamResponse.newBuilder().setResponseInfo(UUID.randomUUID().toString()).build());
            }

            @Override
            public void onError(Throwable throwable) {
                System.out.println(throwable.getMessage());
            }

            @Override
            public void onCompleted() {
                // 流式是在两个不同的流上面进行的双向数据传递，这两个流之间是完全独立的，一般从逻辑上来说，一方把流关闭了，另外一方也要把流关闭掉，也就是使用onCompleted的意义所在
                responseObserver.onCompleted();
            }

        };

    }
}
